4. 高阶函数 Higher-order Functions

高阶函数(Higher-order Functions) 是一种接受一个函数作为参数以函数作为返回值的函数。

高阶函数可以用于:

接下来的内容十分重要,请务必反复温习确保精通相关的知识。

高阶函数可以正确查询到需要的值的原理如下:

对于一些没有副作用,只是接受一个参数并返回进行某些计算结果的较为短小的函数,可以考虑使用 匿名函数(Lambda Function) 来定义。其形式为:

lambda <形参表>: 返回值表达式

lambda 表达式的函数体 只能有一条语句,即返回值表达式。显然 lambda 表达式一定是一个纯函数。因为此限制,其在 python 中并不常见。

函数的 柯里化(Currying) 是指将一个多参数函数转换为单参数的高阶函数的过程,该高阶函数返回一个接受剩余参数的函数。其又称 部分求值,这表明一个柯里化的函数并不会立即求值,而是继续返回另外一个函数,先前传入的值在该函数所处的环境中被储存起来,等待函数需要真正被求值时,将先前传入的所有参数都一次性用于求值。

以上面的 make_adder 函数举例,显然它是 add 函数柯里化后的结果。

对于一个双参数函数,我们可以定义对该函数进行柯里化的函数:

def curry_2args(f):
	def g(x):
		def h(y):
			return f(x,y)
		return h
	return g

解释:该函数接受一个双参数函数,并返回一个单参数函数。返回的这个单参数函数同样返回一个单参数函数,该函数返回的结果等于 f(x,y)

用 lambda 表达式来写,它长这样:

curry_2args = lambda f: lambda x: lambda y: f(x,y)